@@ -275,6 +275,7 @@ urlpatterns += [  | 
            ||
| 275 | 275 | 
                urlpatterns += [  | 
            
| 276 | 276 | 
                url(r'^get_limit_scene_qrcode_url$', wx_views.get_limit_scene_qrcode_url, name='get_limit_scene_qrcode_url'),  | 
            
| 277 | 277 | 
                url(r'^get_wxa_code$', wxa_views.get_wxa_code, name='get_wxa_code'),  | 
            
| 278 | 
                + url(r'^get_wxa_code_scene$', wxa_views.get_wxa_code_scene, name='get_wxa_code_scene'),  | 
            |
| 278 | 279 | 
                ]  | 
            
| 279 | 280 | 
                 | 
            
| 280 | 281 | 
                urlpatterns += [  | 
            
                @@ -5,6 +5,7 @@ from django_response import response  | 
            ||
| 5 | 5 | 
                from pywe_storage import RedisStorage  | 
            
| 6 | 6 | 
                from pywe_wxa_qrcode import get_wxa_code_unlimit  | 
            
| 7 | 7 | 
                 | 
            
| 8 | 
                +from miniapp.models import SceneInfo  | 
            |
| 8 | 9 | 
                from utils.qiniucdn import qiniu_file_url, upload  | 
            
| 9 | 10 | 
                from utils.redis.connect import r  | 
            
| 10 | 11 | 
                 | 
            
                @@ -16,18 +17,38 @@ def get_wxa_code(request):  | 
            ||
| 16 | 17 | 
                     scene = request.POST.get('scene', '')
               | 
            
| 17 | 18 | 
                     page = request.POST.get('page', '')
               | 
            
| 18 | 19 | 
                 | 
            
| 20 | 
                + si, created = SceneInfo.objects.get_or_create(scene=scene, page=page, status=True)  | 
            |
| 21 | 
                +  | 
            |
| 22 | 
                + if si.qiniu_url:  | 
            |
| 23 | 
                +        return response(data={
               | 
            |
| 24 | 
                + 'qiniu_url': si.qiniu_url,  | 
            |
| 25 | 
                + })  | 
            |
| 26 | 
                +  | 
            |
| 19 | 27 | 
                     wxcfg = WECHAT.get('MINIAPP', {})
               | 
            
| 20 | 28 | 
                 | 
            
| 21 | 29 | 
                     appid = wxcfg.get('appID')
               | 
            
| 22 | 30 | 
                     secret = wxcfg.get('appsecret')
               | 
            
| 23 | 31 | 
                 | 
            
| 24 | 
                - res = get_wxa_code_unlimit(scene, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r))  | 
            |
| 32 | 
                + res = get_wxa_code_unlimit(si.sid, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r))  | 
            |
| 25 | 33 | 
                 | 
            
| 26 | 34 | 
                     if res.headers and res.headers.get('Content-disposition'):
               | 
            
| 27 | 35 | 
                qiniu_url = qiniu_file_url(upload(res.content))  | 
            
| 28 | 36 | 
                else:  | 
            
| 29 | 37 | 
                qiniu_url = ''  | 
            
| 30 | 38 | 
                 | 
            
| 39 | 
                + si.qiniu_url = qiniu_url  | 
            |
| 40 | 
                + si.save()  | 
            |
| 41 | 
                +  | 
            |
| 31 | 42 | 
                     return response(data={
               | 
            
| 32 | 43 | 
                'qiniu_url': qiniu_url,  | 
            
| 33 | 44 | 
                })  | 
            
| 45 | 
                +  | 
            |
| 46 | 
                +  | 
            |
| 47 | 
                +def get_wxa_code_scene(request):  | 
            |
| 48 | 
                +    sid = request.POST.get('sid', '')
               | 
            |
| 49 | 
                +  | 
            |
| 50 | 
                + scene = SceneInfo.objects.get(sid=sid, status=True)  | 
            |
| 51 | 
                +  | 
            |
| 52 | 
                +    return response(data={
               | 
            |
| 53 | 
                + 'scene': scene.scene,  | 
            |
| 54 | 
                + })  | 
            
                @@ -0,0 +1,18 @@  | 
            ||
| 1 | 
                +# Generated by Django 3.2.16 on 2022-10-27 14:30  | 
            |
| 2 | 
                +  | 
            |
| 3 | 
                +from django.db import migrations, models  | 
            |
| 4 | 
                +  | 
            |
| 5 | 
                +  | 
            |
| 6 | 
                +class Migration(migrations.Migration):  | 
            |
| 7 | 
                +  | 
            |
| 8 | 
                + dependencies = [  | 
            |
| 9 | 
                +        ('member', '0048_merge_20221027_2056'),
               | 
            |
| 10 | 
                + ]  | 
            |
| 11 | 
                +  | 
            |
| 12 | 
                + operations = [  | 
            |
| 13 | 
                + migrations.AlterField(  | 
            |
| 14 | 
                + model_name='memberactivityinfo',  | 
            |
| 15 | 
                + name='limit_image_num',  | 
            |
| 16 | 
                + field=models.IntegerField(default=0, help_text='限制图片数量', verbose_name='limit_image_num'),  | 
            |
| 17 | 
                + ),  | 
            |
| 18 | 
                + ]  | 
            
                @@ -1,4 +1,13 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +  | 
            |
| 1 | 3 | 
                from django.contrib import admin  | 
            
| 2 | 4 | 
                 | 
            
| 5 | 
                +from miniapp.models import SceneInfo  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +  | 
            |
| 8 | 
                +class SceneInfoAdmin(admin.ModelAdmin):  | 
            |
| 9 | 
                +    list_display = ('sid', 'scene', 'page', 'qiniu_url', 'status', 'created_at', 'updated_at')
               | 
            |
| 10 | 
                +    list_filter = ('status', )
               | 
            |
| 11 | 
                +  | 
            |
| 3 | 12 | 
                 | 
            
| 4 | 
                -# Register your models here.  | 
            |
| 13 | 
                +admin.site.register(SceneInfo, SceneInfoAdmin)  | 
            
                @@ -0,0 +1,33 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +# Generated by Django 3.2.16 on 2022-10-27 14:30  | 
            |
| 3 | 
                +  | 
            |
| 4 | 
                +from django.db import migrations, models  | 
            |
| 5 | 
                +import shortuuidfield.fields  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +  | 
            |
| 8 | 
                +class Migration(migrations.Migration):  | 
            |
| 9 | 
                +  | 
            |
| 10 | 
                + initial = True  | 
            |
| 11 | 
                +  | 
            |
| 12 | 
                + dependencies = [  | 
            |
| 13 | 
                + ]  | 
            |
| 14 | 
                +  | 
            |
| 15 | 
                + operations = [  | 
            |
| 16 | 
                + migrations.CreateModel(  | 
            |
| 17 | 
                + name='SceneInfo',  | 
            |
| 18 | 
                + fields=[  | 
            |
| 19 | 
                +                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
               | 
            |
| 20 | 
                +                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
               | 
            |
| 21 | 
                +                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
               | 
            |
| 22 | 
                +                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
               | 
            |
| 23 | 
                +                ('sid', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='Sid', max_length=22, null=True, unique=True)),
               | 
            |
| 24 | 
                +                ('scene', models.CharField(blank=True, help_text='Scene', max_length=255, null=True, verbose_name='scene')),
               | 
            |
| 25 | 
                +                ('page', models.CharField(blank=True, help_text='Page', max_length=255, null=True, verbose_name='page')),
               | 
            |
| 26 | 
                +                ('qiniu_url', models.CharField(blank=True, help_text='七牛链接', max_length=255, null=True, verbose_name='qiniu_url')),
               | 
            |
| 27 | 
                + ],  | 
            |
| 28 | 
                +            options={
               | 
            |
| 29 | 
                + 'verbose_name': 'Scene',  | 
            |
| 30 | 
                + 'verbose_name_plural': 'Scene',  | 
            |
| 31 | 
                + },  | 
            |
| 32 | 
                + ),  | 
            |
| 33 | 
                + ]  | 
            
                @@ -1,4 +1,24 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +  | 
            |
| 1 | 3 | 
                from django.db import models  | 
            
| 4 | 
                +from django.utils.translation import ugettext_lazy as _  | 
            |
| 5 | 
                +from django_models_ext import BaseModelMixin  | 
            |
| 6 | 
                +from shortuuidfield import ShortUUIDField  | 
            |
| 7 | 
                +  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                +class SceneInfo(BaseModelMixin):  | 
            |
| 10 | 
                + sid = ShortUUIDField(_(u'sid'), max_length=32, blank=True, null=True, help_text=u'Sid', db_index=True, unique=True)  | 
            |
| 11 | 
                + scene = models.CharField(_(u'scene'), max_length=255, blank=True, null=True, help_text=u'Scene')  | 
            |
| 12 | 
                + page = models.CharField(_(u'page'), max_length=255, blank=True, null=True, help_text=u'Page')  | 
            |
| 13 | 
                + qiniu_url = models.CharField(_(u'qiniu_url'), max_length=255, blank=True, null=True, help_text=u'七牛链接')  | 
            |
| 14 | 
                +  | 
            |
| 15 | 
                + class Meta:  | 
            |
| 16 | 
                + verbose_name = _(u'Scene')  | 
            |
| 17 | 
                + verbose_name_plural = _(u'Scene')  | 
            |
| 2 | 18 | 
                 | 
            
| 19 | 
                + unique_together = (  | 
            |
| 20 | 
                +        ('scene', 'page'),
               | 
            |
| 21 | 
                + )  | 
            |
| 3 | 22 | 
                 | 
            
| 4 | 
                -# Create your models here.  | 
            |
| 23 | 
                + def __unicode__(self):  | 
            |
| 24 | 
                + return '%d' % self.pk  |